{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用tensorflow实现神经网络注意一下几个方面：\n",
    "- 网络结构\n",
    "- 卷积参数\n",
    "- 网络层数\n",
    "- 分类数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#实现简单的手写识别网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入所需包\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "import numpy as np \n",
    "from matplotlib import pyplot as plt\n",
    "import tensorflow as tf\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-31607f76dcfe>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /home/cxp/env/dl/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /home/cxp/env/dl/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /home/cxp/env/dl/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/cxp/env/dl/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.one_hot on tensors.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/cxp/env/dl/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\",one_hot=True) #读入数据，进行独热编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(55000, 784)\n",
      "(55000, 10)\n"
     ]
    }
   ],
   "source": [
    "#查看数据是什么样子，可以看到数据是被诶展开成一维28*28\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(5000, 784)\n",
      "(5000, 10)\n"
     ]
    }
   ],
   "source": [
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000, 784)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4,idx+1)\n",
    "    plt.axis(\"off\")\n",
    "    plt.title(\"[{}]\".format(np.argmax(mnist.train.labels[idx])))#因为做了独热编码，argmax的目的是返回对应的1位置的索引\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))#重新整合成二维图像数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在要定义网络，使用tf.placeholder(dtype,shape=None,name=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\",[None,784],name=\"x\")\n",
    "y = tf.placeholder(\"float\",[None,10],name=\"y\")\n",
    "\n",
    "x_images = tf.reshape(x,[-1,28,28,1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后定义第一个卷积层,6个5\\*5的卷积核，28*28*1卷积之后数据变为宽\\*高\\*深度24\\*24\\*6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/cxp/env/dl/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "with tf.name_scope(\"conv1\"):\n",
    "    C1 = tf.contrib.slim.conv2d(\n",
    "    x_images,6,[5,5],padding=\"VALID\",activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "添加一层池化层，使用最大池化，步长为2，池化后数据变为12\\*12\\*6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope(\"pool1\"):\n",
    "    S2 = tf.contrib.slim.max_pool2d(\n",
    "    C1,[2,2],stride=2,padding=\"VALID\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再定义一层卷积层，使用16个5\\*5卷积核，卷积后数据变为8\\*8\\*16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope(\"conv2\"):\n",
    "    C3 = tf.contrib.slim.conv2d(\n",
    "    S2,16,[5,5],padding=\"VALID\",activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再定义一层池化层，4\\*4\\*16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope(\"pool2\"):\n",
    "    S4 = tf.contrib.slim.max_pool2d(\n",
    "    C3,[2,2],stride=2,padding=\"VALID\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因为刚开始我们卷积使用的是二维的数据，后面全连接层需要使用一维数据，所以需要将数据展开。并且定义两层全连接层"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope(\"fc1\"):\n",
    "    S4_flat = tf.contrib.slim.flatten(S4)#使用flatten函数\n",
    "    C5 = tf.contrib.slim.fully_connected(S4_flat,120,activation_fn=tf.nn.relu)\n",
    "\n",
    "with tf.name_scope(\"fc2\"):\n",
    "    F6 = tf.contrib.slim.fully_connected(C5,84,activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先对特征进行dropout，优化网络，然后将输出送入到最后一层全连接层，最后全连接层共10个神经元（**类别**）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-19-4e4fe365feda>:3: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n"
     ]
    }
   ],
   "source": [
    "with tf.name_scope(\"dropout\"):\n",
    "    keep_prob = tf.placeholder(name=\"keep_prob\",dtype=tf.float32)\n",
    "    F6_prob = tf.nn.dropout(F6,keep_prob)\n",
    "\n",
    "with tf.name_scope(\"fc3\"):\n",
    "    logits = tf.contrib.slim.fully_connected(F6_prob,10,activation_fn=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义完网络的结构，接下来定义计算网络的损失函数（使用交叉熵损失）和网络优化器（使用sgd）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Conv/weights:0\n",
      "INFO:tensorflow:Summary name Conv/weights:0 is illegal; using Conv/weights_0 instead.\n",
      "Conv/biases:0\n",
      "INFO:tensorflow:Summary name Conv/biases:0 is illegal; using Conv/biases_0 instead.\n",
      "Conv_1/weights:0\n",
      "INFO:tensorflow:Summary name Conv_1/weights:0 is illegal; using Conv_1/weights_0 instead.\n",
      "Conv_1/biases:0\n",
      "INFO:tensorflow:Summary name Conv_1/biases:0 is illegal; using Conv_1/biases_0 instead.\n",
      "fully_connected/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected/weights:0 is illegal; using fully_connected/weights_0 instead.\n",
      "fully_connected/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected/biases:0 is illegal; using fully_connected/biases_0 instead.\n",
      "fully_connected_1/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_1/weights:0 is illegal; using fully_connected_1/weights_0 instead.\n",
      "fully_connected_1/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_1/biases:0 is illegal; using fully_connected_1/biases_0 instead.\n",
      "fully_connected_2/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_2/weights:0 is illegal; using fully_connected_2/weights_0 instead.\n",
      "fully_connected_2/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_2/biases:0 is illegal; using fully_connected_2/biases_0 instead.\n",
      "fully_connected_3/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_3/weights:0 is illegal; using fully_connected_3/weights_0 instead.\n",
      "fully_connected_3/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_3/biases:0 is illegal; using fully_connected_3/biases_0 instead.\n",
      "fully_connected_4/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_4/weights:0 is illegal; using fully_connected_4/weights_0 instead.\n",
      "fully_connected_4/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_4/biases:0 is illegal; using fully_connected_4/biases_0 instead.\n"
     ]
    }
   ],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=y))\n",
    "l2_loss = tf.add_n([\n",
    "    tf.nn.l2_loss(w)\n",
    "    for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)])\n",
    "\n",
    "for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):\n",
    "    print(w.name)\n",
    "    tf.summary.histogram(w.name, w)\n",
    "\n",
    "#加入L2正则项   \n",
    "total_loss = cross_entropy_loss + 7e-5*l2_loss\n",
    "\n",
    "tf.summary.scalar('cross_entropy_loss', cross_entropy_loss)\n",
    "tf.summary.scalar('l2_loss', l2_loss)\n",
    "tf.summary.scalar('total_loss', total_loss)\n",
    "\n",
    "#定义优化器和其优化任务\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=0.3).minimize(total_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义准确率的计算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(y,1),tf.argmax(logits,1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 100\n",
    "training_step = 1100\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.353522, the validation accuracy is 0.921\n",
      "after 200 training steps, the loss is 0.209231, the validation accuracy is 0.9536\n",
      "after 300 training steps, the loss is 0.262539, the validation accuracy is 0.9668\n",
      "after 400 training steps, the loss is 0.276442, the validation accuracy is 0.9628\n",
      "after 500 training steps, the loss is 0.075118, the validation accuracy is 0.9708\n",
      "after 600 training steps, the loss is 0.0397711, the validation accuracy is 0.9782\n",
      "after 700 training steps, the loss is 0.0555613, the validation accuracy is 0.9774\n",
      "after 800 training steps, the loss is 0.147526, the validation accuracy is 0.9796\n",
      "after 900 training steps, the loss is 0.074587, the validation accuracy is 0.9832\n",
      "after 1000 training steps, the loss is 0.198104, the validation accuracy is 0.9804\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9853\n"
     ]
    }
   ],
   "source": [
    "merged = tf.summary.merge_all()\n",
    "with tf.Session() as sess:\n",
    "    writer = tf.summary.FileWriter(\"logs/\", sess.graph)\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "        keep_prob: 1.0              #在验证集和测试集上不使用dropout\n",
    "    }\n",
    "    test_data = {\n",
    "        x: mnist.test.images,\n",
    "        y: mnist.test.labels, \n",
    "        keep_prob: 1.0\n",
    "    }\n",
    "    \n",
    "\n",
    "    for i in range(training_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss, rs = sess.run(\n",
    "            [optimizer, cross_entropy_loss, merged],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                keep_prob: 0.6\n",
    "            })\n",
    "        writer.add_summary(rs, i)\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-1000\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state(\"./\")\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess,ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred,accuracy],\n",
    "            feed_dict = {\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16],\n",
    "                keep_prob: 1.0\n",
    "            })\n",
    "        \n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(\n",
    "                np.argmax(mnist.test.labels[idx]), order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "总结：\n",
    "\n",
    "- 1、本次课程参考代码实现了一个简单的神经网络，网络中有2层卷积层、2层池化层、3层全连接层，使用了dropout技术，使用到了优化器是梯度下降，损失函数使用的交叉熵损失，并加入了L2正则项。\n",
    "- 2、熟悉基本的tensorflow建立神经网络和模型训练验证的步骤，熟悉了相应这个网络中的API。\n",
    "- 3、参数的设置。通过设置不同的学习率，进行训练可以得到不同的准确度，学习率以1/3进行减小的过程中，通过对比测试集上准确率，发现训练效果都不如0.3的参数好，说明参数优化不仅需要一定的科学性，还需要经验值的加持。\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "1、卷积的特性：\n",
    "对于图像图像的卷积操作来说，就是对输入图像的某一局部区域通过滑动卷积核进行点积计算，通过设置卷积核的大小、参数可以起到滤波或者特征提取的作用。\n",
    "\n",
    "2、为什么说卷积比全连接好：\n",
    "\n",
    "- 局部连接：在处理图像数据时，卷积操作考虑到了像素邻域之间的关系，有利于提取特征，加速计算。\n",
    "- 权值共享：卷积使用到权值共享，减少参数量，加速优化计算。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
